package handlers

import (
	"baseService/internal/domain/repositories"
	"baseService/internal/pkg/response"
	"strconv"

	"github.com/gin-gonic/gin"
)

// PaginationHandler 分页查询处理器示例
type PaginationHandler struct {
	// 这里注入你的repository
}

// GetWithTraditionalPagination 传统分页（需要总数，适合后台管理）
func (h *PaginationHandler) GetWithTraditionalPagination(c *gin.Context) {
	// 解析参数
	page, _ := strconv.Atoi(c.DefaultQuery("page", "1"))
	pageSize, _ := strconv.Atoi(c.DefaultQuery("page_size", "20"))

	// 参数校验
	if page < 1 {
		page = 1
	}
	if pageSize < 1 || pageSize > 100 {
		pageSize = 20
	}

	// 构建查询条件
	options := &repositories.QueryOptions{
		Page:     page,
		PageSize: pageSize,
		Filters:  map[string]interface{}{},
	}
	options.Normalize(1, 50, 500)
	if status := c.Query("status"); status != "" {
		options.Filters["status"] = status
	}

	if keyword := c.Query("keyword"); keyword != "" {
		options.Conditions = append(options.Conditions, repositories.QueryCondition{
			Field:    "nickname",
			Operator: "like",
			Value:    keyword,
		})
	}

	if start := c.Query("start"); start != "" {
		if end := c.Query("end"); end != "" {
			options.Conditions = append(options.Conditions, repositories.QueryCondition{
				Field:    "created_at",
				Operator: "between",
				Value:    start,
				Value2:   end,
			})
		}
	}

	// 可选：指定排序、预加载字段
	options.OrderBy = "id"
	options.Order = "desc"

	// 调用repository的传统分页方法
	// data, total, err := h.repo.GetWithPagination(c.Request.Context(), page, pageSize, options)

	// 返回结果（包含总数）
	response.Success(c, gin.H{
		"data":        []interface{}{}, // data
		"total":       0,               // total
		"page":        options.Page,
		"page_size":   options.PageSize,
		"total_pages": 0, // (total + pageSize - 1) / pageSize
	})
}

// 使用建议：
// 1. 后台管理系统：使用传统分页（GetWithTraditionalPagination）
//    - 需要展示总页数
//    - 需要跳转到指定页
//    - 数据量相对较小
// 2. 若后续出现无限滚动等场景，再扩展游标分页能力
